/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dominio.investimentos;

import java.util.Calendar;

/**
 * 
 * @author Daniel
 */
public abstract class Operacao {

    //private String tipo;
    private int qtd;
    private Calendar validade;
    private Calendar data;
    private float encargos;
    private float valorTotal;

    /*
     * Método abstrato que indica o comportamento comum a todas as ações. Deve ser implementado nas subclasses
     */
    public abstract int calcularNovaQtd(int qtd);

    public float getEncargos() {
        return encargos;
    }

    public void setEncargos(float encargos) {
        this.encargos = encargos;
    }

    public int getQtd() {
        return qtd;
    }

    public void setQtd(int qtd) {
        this.qtd = qtd;
    }

    //public String getTipo() {
    //    return tipo;
    //}
    //public void setTipo(String tipo) {
    //    this.tipo = tipo;
    //}
    public Calendar getValidade() {
        return validade;
    }

    public void setValidade(Calendar validade) {
        this.validade = validade;
    }

    public float getValorTotal() {
        return valorTotal;
    }

    protected void setValorTotal(float valorTotal) {
        this.valorTotal = valorTotal;
    }

    /*
     * Ponto de acesso global que retorna um objeto concreta do tipo de operacao desejada
     */
    public static Operacao obterOperacao(String tipo) {
        Operacao operacao = null;

        if (tipo.equalsIgnoreCase("compra") || tipo.equals("1")) {
            operacao = new OperacaoCompra();
        }
        if (tipo.equalsIgnoreCase("venda") || tipo.equals("2")) {
            operacao = new OperacaoVenda();
        }

        return operacao;
    }

    /*
     * calcula o valor total da operação ( valor atual da ação sendo operada * a quantidade de ações operadas)
     */
    public void gerarValorTotal(Acao acao) {
        this.valorTotal = (float) this.getQtd() * acao.getValorAtual();
    }
}
